// index.js
$(document).ready(function () {
  // 1. 定义当前日期和月份
  const today = moment().format('YYYY-MM-DD');
  let currentMonth = moment().format('YYYY-MM'); // 默认显示当前月份

  // 用于存储日程数据
  let schedules = {};

  // 2. 获取或模拟获取日程数据
  function fetchScheduleData(month) {
    // 设置本地测试数据
    // 你也可以根据需要替换为其他月份的示例
    schedules = {
      "2025-07-17": [
        { "title": "项目讨论上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" },
        { "title": "项目讨论上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" },
        { "title": "项目讨论上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" }
      ],
      "2025-07-18": [
        { "title": "需求评审", "url": "#" }
      ],
      "2025-07-19": [
        { "title": "版本上线上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" }
      ],
      "2025-07-22": [
        { "title": "客户拜访上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" }
      ],
      "2025-07-23": [
        { "title": "团队会议上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" }
      ],
      "2025-07-16": [
        { "title": "今天特别事件上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目上海财经大学春季2025年招聘会正式启动项目", "url": "#" }
      ]
    };

    // 模拟 Ajax 请求
    $.ajax({
      url: `https://example.com/api/schedules?month=${month}`,
      method: 'GET',
      dataType: 'json',
      success: function (data) {
        // 如果接口返回空数据，则继续使用本地测试数据
        schedules = data && Object.keys(data).length > 0 ? data : schedules;
        renderCalendar(month);
      },
      error: function (xhr, status, error) {
        console.error('获取日程失败:', error);
        // 失败也继续使用本地测试数据
        renderCalendar(month);
      }
    });
  }

  // 3. 渲染日历
  function renderCalendar(month) {
    $('#calendar').empty();
    $('#current-month').text(moment(month).format('YYYY-MM'));

    const startOfMonth = moment(month).startOf('month');
    const endOfMonth   = moment(month).endOf('month');
    const firstDayOfWeek = startOfMonth.day(); // 0 表示周日

    // 填充空白格子（非本月的前置空格）
    for (let i = 0; i < firstDayOfWeek; i++) {
      $('#calendar').append('<div class="day empty"></div>');
    }

    // 循环生成当月日期
    for (let d = 1; d <= endOfMonth.date(); d++) {
      const dateString = moment(month).date(d).format('YYYY-MM-DD');
      const dayMoment  = moment(dateString);

      // 基础类名
      let dayClass = "day";
      // 日程弹出框 HTML（若有日程则生成）
      let scheduleListHTML = "";

      // 判断“今天” → 始终橙色
      if (dayMoment.isSame(today)) {
        dayClass += " event-today"; // 橙色
      }
      // 若不是“今天”，再看有没有日程
      else if (schedules[dateString]) {
        // 有日程才上色
        if (dayMoment.isBefore(today)) {
          // 过去日期有日程 → 灰色
          dayClass += " event-gray";
        } else {
          // 未来日期有日程 → 深红色
          dayClass += " event-red";
        }
      }
      // 没有日程的过去/未来 → 不加颜色

      // 如果有日程，就生成弹出框
      if (schedules[dateString]) {
        scheduleListHTML = '<div class="schedule-list">';
        schedules[dateString].forEach(item => {
          scheduleListHTML += `
            <div class="schedule-item">
              <a href="${item.url}" target="_blank">• ${item.title}</a>
            </div>`;
        });
        scheduleListHTML += '</div>';
      }

      // 将日期格子插入 DOM
      $('#calendar').append(`
        <div class="${dayClass}" data-date="${dateString}">
          ${d}
          ${scheduleListHTML}
        </div>
      `);
    }

    // 4. 绑定鼠标事件，让弹出框可左右切换，同时为带有日程的日期添加手型光标
    $('.day').each(function() {
      const $day = $(this);
      const $popup = $day.find('.schedule-list');

      if ($popup.length > 0) {
        // 添加手型光标
        $day.css('cursor', 'pointer');

        // 鼠标移入
        $day.on('mouseenter', function() {
          $popup.css('display', 'block'); // 显示弹框
          
          // 重置箭头类
          $popup.removeClass('arrow-bottom arrow-left arrow-right');

          // 默认放在右侧，箭头向左
          $popup.css({
            left: '100%',
            top: '50%',
            transform: 'translateY(-50%)',
            right: 'auto'
          }).addClass('arrow-left');

          // 计算位置和空间
          const dayRect     = $day[0].getBoundingClientRect();
          const popupRect   = $popup[0].getBoundingClientRect();
          const windowWidth = window.innerWidth;
          const windowHeight = window.innerHeight;

          // 检查右侧空间是否足够
          if (dayRect.right + popupRect.width > windowWidth) {
            // 右侧空间不足，放左侧，箭头向右
            $popup.css({
              left: 'auto',
              right: '100%',
              top: '50%',
              transform: 'translateY(-50%)'
            }).removeClass('arrow-left').addClass('arrow-right');
            
            // 重新获取弹框位置信息
            const newPopupRect = $popup[0].getBoundingClientRect();
            
            // 检查左侧空间是否足够
            if (dayRect.left - newPopupRect.width < 0) {
              // 左右都不够，尝试放上方或下方
              const spaceAbove = dayRect.top;
              const spaceBelow = windowHeight - dayRect.bottom;
              
              if (spaceAbove > spaceBelow && spaceAbove > popupRect.height) {
                // 放上方，箭头向下
                $popup.css({
                  left: '50%',
                  right: 'auto',
                  top: 'auto',
                  bottom: '100%',
                  transform: 'translateX(-50%)'
                }).removeClass('arrow-right').addClass('arrow-bottom');
              } else if (spaceBelow > popupRect.height) {
                // 放下方，箭头向上（默认）
                $popup.css({
                  left: '50%',
                  right: 'auto',
                  top: '100%',
                  bottom: 'auto',
                  transform: 'translateX(-50%)'
                }).removeClass('arrow-right');
              } else {
                // 空间都不够，强制放右侧，可能会超出屏幕
                $popup.css({
                  left: '100%',
                  right: 'auto',
                  top: '50%',
                  bottom: 'auto',
                  transform: 'translateY(-50%)'
                }).removeClass('arrow-right').addClass('arrow-left');
              }
            }
          } else {
            // 右侧空间足够，但检查垂直空间
            if (dayRect.top + popupRect.height > windowHeight) {
              // 垂直空间不足，尝试调整到上方
              const spaceAbove = dayRect.top;
              if (spaceAbove > popupRect.height) {
                $popup.css({
                  left: '50%',
                  right: 'auto',
                  top: 'auto',
                  bottom: '100%',
                  transform: 'translateX(-50%)'
                }).removeClass('arrow-left').addClass('arrow-bottom');
              }
            }
          }
        });

        // 鼠标移出
        $day.on('mouseleave', function() {
          $popup.css('display', 'none');
        });
      }
    });
  }

  // 首次加载当前月份日历
  fetchScheduleData(currentMonth);

  // 上一月
  $('#prev-month').click(function () {
    currentMonth = moment(currentMonth).subtract(1, 'months').format('YYYY-MM');
    fetchScheduleData(currentMonth);
  });

  // 下一月
  $('#next-month').click(function () {
    currentMonth = moment(currentMonth).add(1, 'months').format('YYYY-MM');
    fetchScheduleData(currentMonth);
  });
});